Status flag combinatorial logic such as a comparator typically is used to gate asynchronous FIFO read and write operations to produce a flag indicating to the user the FIFO's status, e.g. empty, almost empty, half full, almost full and full. Often, such combinatorial logic is slow (imagine a ripple carry that must propagate through an n-stage adder, where n may be sixteen or greater) and has transient outputs that result from different (skewed) logic gate delays. Such transient outputs are referred to in the literature as glitches and their removal to avoid false status indications to the FIFO's user is referred to in the literature as glitch suppression. Unfortunately, glitch suppression, which is most often implemented as a delay that simply masks such gate delays, further delays the output of the flag generation logic so as to render it inaccurate to the extent of its lack of currency or immediacy.
The major disadvantages of prior art methods and apparatus for flag generation are outlined below. Since one must ensure that glitches from the comparison logic (constructed from purely combinatorial logic) do not become visible to the user, the result of the comparison must be passed through a glitch suppression block. This typically is implemented as a delay greater than the largest possible settling time of the comparison logic. If, for example, the comparator were realized with a ripple adder, the amount of delay that would have to be inserted would be greater than the time necessary for a carry signal to propagate through the entire chain of adders to set, for example, the most significant bit (MSB) of the sum to its correct value. Therefore, for the ever decreasing clock periods, those of skill will appreciate that a flag generated with this method can have quite large access times relative to the clock period of the device. These large access times would have serious implications on certain applications, such as using the status flags for block counting.
Since the set of status flags for a FIFO are by definition supposed to describe the amount of information currently present within the device, one can see that if the flags have large access times, the information delivered to the user may be stale (describe a historical rather than a present state of the FIFO) or simply inaccurate. Any application that requires knowledge of how much data is in the FIFO memory array at the current (i.e. immediate) point in time, would suffer under prior art and methods and apparatus for flag generation.